package com.founder.cebxkit;

public class CEBXFileWrapper {
	private static long mInitialized = 0;
	private long mXEKFile;
	private long mXEKDoc;
	private long mXEKStructureDoc;
	
	// 加密类型
	public static final int XEK_SECURITY_NONE 	= 0;	// 无加密
	public static final int XEK_SECURITY_LOCAL	= 1;	// 本地安全加密
	public static final int XEK_SECURITY_DRM	= 2;	// DRM加密
	
	/**
	 * 构造函数，负责各种初始值。
	 * @return
	 */
	public CEBXFileWrapper() {
		mXEKFile = 0;
		mXEKDoc = 0;
		mXEKStructureDoc = 0;
	}

	/**
	 * 初始化引擎。
	 * @param resDir		资源目录路径。
	 * @param workingDir	工作区路径。
	 * @return				是否成功。
	 */
	public native boolean Init(String resDir, String workingDir);

	/**
	 * 卸载引擎。
	 * @return				是否成功。
	 */
	public native boolean Destroy();
	
	/**
	 * 设置字体名字到字体文件的对应关系，调用该接口后将影响相应字体的显示。
	 * @param fontFaceName	字体名字。
	 * @param fontFilePath	字体文件的路径。
	 * @return				是否成功。
	 */
	public native boolean RegisterFontFaceName(String fontFaceName, String fontFilePath);
	
	/**
	 * 打开文件。
	 * @param fileDir			目标文件路径。
	 * @param physicalSeqNum	物理包的历史版本序号，0表示打开最新版本
	 * @return					是否成功。
	 */
	public native boolean Open(String fileDir, int physicalSeqNum);

	/**
	 * 关闭文件。
	 * @return
	 */
	public native void Close();

	/**
	 * 获取CEBX文件中的文档个数。
	 * @return 			文档个数。
	 */
	public native int GetDocumentCount();
	
	/**
	 * 获取文档加密类型。
	 * @param index		文档索引值，从0开始。
	 * @return 			加密类型。
	 */
	public native int GetDocSecurityType(int index);
	
	/**
	 * 获取文档版本和子集信息。
	 * @param version	版本和子集信息。
	 * @return 			
	 */
	public native void GetFileVersion(CxFileVersion version);
	
	/**
	 * 获取文档封面数据。
	 * @param index		文档索引值，从0开始。
	 * @param fileinfo	封面数据。
	 * @return 			
	 */
	public native void GetDocCoverData(int index, CxFileInfo fileinfo);
	
	/**
	 * 获取文档自定义信息的个数。
	 * @param index		文档索引值，从0开始。
	 * @return 			自定义信息的个数。
	 */
	public native int GetCustomInfoCount(int index);
	
	/**
	 * 获取文档的一个自定义信息项。
	 * @param docIndex			文档索引值，从0开始。
	 * @param custominfoIndex	文档中自定义信息的索引，从0开始。
	 * @param custominfo		自定义信息项。
	 * @return		 			
	 */
	public native void GetCustomInfo(int docIndex, int custominfoIndex, CxDocCustomInfo custominfo);
	
	/**
	 * 打开CEBX文件中指定的文档。
	 * @param index			文档索引值，从0开始。
	 * @return				文档对象。
	 */
	public CEBXDocWrapper OpenDoc(int index) {
		if (mInitialized > 0)
		{
			long lRet = OpenXEKDoc(index);
			if (lRet == 0)
			{
				CEBXDocWrapper docWrapper = new CEBXDocWrapper(mXEKDoc, mXEKStructureDoc);
				return docWrapper;
			}
		}
		
		return null;
	}
	
	/**
	 * 打开DRM加密的CEBX文件中指定的文档。
	 * @param index			文档索引值，从0开始。
	 * @param key			DRM Key。
	 * @param keylen		DRM Key 长度。
	 * @return				文档对象。
	 */
	public CEBXDocWrapper OpenDoc(int index, byte[] key, int keylen) {
		if (mInitialized > 0)
		{
			long lRet = OpenXEKDoc(index, key, keylen);
			if (lRet == 0)
			{
				CEBXDocWrapper docWrapper = new CEBXDocWrapper(mXEKDoc, mXEKStructureDoc);
				return docWrapper;
			}
		}
		
		return null;
	}
	
	/**
	 * 关闭CEBX文件中指定的文档。
	 * @param doc			文档对象。
	 * @return
	 */
	public void CloseDoc(CEBXDocWrapper doc) {
		CloseXEKDoc(doc.GetXEKDoc());
	}
	
	/**
	 * 打开CEBX文件中指定的文档。
	 * @param docIndex			文档索引值，从0开始。
	 * @return		 			错误码。
	 */
	private native long OpenXEKDoc(int index);
	
	/**
	 * 打开DRM加密的CEBX文件中指定的文档。
	 * @param docIndex			文档索引值，从0开始。
	 * @param key				DRM Key。
	 * @param keylen			DRM Key 长度。
	 * @return		 			错误码。
	 */
	private native long OpenXEKDoc(int index, byte[] key, int keylen);
	
	/**
	 * 关闭CEBX文件中指定的文档。
	 * @param handle			文档对象。
	 * @return
	 */
	private native void CloseXEKDoc(long handle);
}
